/*------------------------------------------------------------------------------*\
**   Copyright 2008-2009 Jonhnny Weslley                                        **
**                                                                              **
**   Licensed under the Apache License, Version 2.0 (the "License");            **
**   you may not use this file except in compliance with the License.           **
**   You may obtain a copy of the License at                                    **
**                                                                              **
**       http://www.apache.org/licenses/LICENSE-2.0                             **
**                                                                              **
**   Unless required by applicable law or agreed to in writing, software        **
**   distributed under the License is distributed on an "AS IS" BASIS,          **
**   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   **
**   See the License for the specific language governing permissions and        **
**   limitations under the License.                                             **
\*------------------------------------------------------------------------------*/

package org.scalashell.commands

import jline.History
import org.scalashell.ComplexCommandSupport

abstract class HistoryCommand(name: String, history: History) extends ComplexCommandSupport(name, "show") {

  "show" | { args =>
    history.getHistoryList.toArray.zipWithIndex foreach { x =>
      println(" @|bold " + x._2 + "| " + x._1)
    }
  }

  "clear" | { args =>
    history.clear
    println("History cleared")
  }

  "flush" | { args =>
    history.flushBuffer
    println("History flushed")
  }

  "recall" | { args =>
    args match {
      case List(id) => {
        try {
          val line = history.getHistoryList get id.toInt
          recall(line.toString)

        } catch {
          case e => fail("Invalid history identifier: " + id, e)
        }
      }
      case _ => fail("History recall requires a single history identifier")
    }
  }

  def recall(command: String)

}
